package com.woniuxy.orderservice.rabbit.queue;

import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.HashMap;
import java.util.Map;

/**
 * 死信队列
 */
@Configuration
public class DeadLetterQueueConfig {

    /**
     * 私教订单死信队列
     * @return
     */
    @Bean
    public Queue CoachCourseOrderDeadQueue() {
        Map<String, Object> params = new HashMap<>();
        //定义该队列中消息的生存时间 单位毫秒 生存时间最终对应业务的延迟执行时间
        params.put("x-message-ttl", 30 * 1000);//30s
        // x-dead-letter-exchange 属性用于声明死信转发到的交换机
        params.put("x-dead-letter-exchange", "coach-order-dead-ex");
        // x-dead-letter-routing-key 声明了这些死信在转发时携带的路由键名称。
        params.put("x-dead-letter-routing-key", "coach-order-dead-key");
        Queue queue = new Queue("coach-order-dead-queue", true, false, false, params);
        return queue;
    }
    //可以写其它的死信队列

    /**
     * 私教订单最终判断死信队列
     * @return
     */
    @Bean
    public Queue coachLongDeadQueue() {
        Map<String, Object> params = new HashMap<>();
        //定义该队列中消息的生存时间 单位毫秒 生存时间最终对应业务的延迟执行时间
        params.put("x-message-ttl", 24 * 60 * 1000);//24小时
        // x-dead-letter-exchange 属性用于声明死信转发到的交换机
        params.put("x-dead-letter-exchange", "coach-long-order-dead-ex");
        // x-dead-letter-routing-key 声明了这些死信在转发时携带的路由键名称。
        params.put("x-dead-letter-routing-key", "coach-long-order-dead-key");
        Queue queue = new Queue("coach-long-order-dead-queue", true, false, false, params);
        return queue;
    }
    /**
     * 团课订单死信队列
     * @return
     */
    @Bean
    public Queue teamCourseOrderDeadQueue() {
        Map<String, Object> params = new HashMap<>();
        //定义该队列中消息的生存时间 单位毫秒 生存时间最终对应业务的延迟执行时间
        params.put("x-message-ttl", 3*60 * 1000);//3分钟
        // x-dead-letter-exchange 属性用于声明死信转发到的交换机
        params.put("x-dead-letter-exchange", "team-order-dead-ex");
        // x-dead-letter-routing-key 声明了这些死信在转发时携带的路由键名称。
        params.put("x-dead-letter-routing-key", "team-order-dead-key");
        Queue queue = new Queue("team-order-dead-queue", true, false, false, params);
        return queue;
    }

    /**
     * 会员卡订单死信队列
     * @return
     */
    @Bean
    public Queue cardOrderDeadQueue() {
        Map<String, Object> params = new HashMap<>();
        //定义该队列中消息的生存时间 单位毫秒 生存时间最终对应业务的延迟执行时间
        params.put("x-message-ttl", 3*60 * 1000);//3分钟
        // x-dead-letter-exchange 属性用于声明死信转发到的交换机
        params.put("x-dead-letter-exchange", "card-order-dead-ex");
        // x-dead-letter-routing-key 声明了这些死信在转发时携带的路由键名称。
        params.put("x-dead-letter-routing-key", "card-order-dead-key");
        Queue queue = new Queue("card-order-dead-queue", true, false, false, params);
        return queue;
    }
}
